<?php

class RolesController extends CustomController
{

    public function listarRoles()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isSecurity();
        // Get page and list
        $pageNumber = $this->getPage();
        $roles = $this->model->getRoles($pageNumber);
        $vars = array(
            'edit_action'     => $this->link(MODULE_ROLES, MODULE_ROLES_EDITAR_ROL).'?id=',
            'delete_action'   => $this->link(MODULE_ROLES, MODULE_ROLES_BORRAR_ROL).'?id=',
            'pagination_link' => $this->link(MODULE_ROLES, MODULE_ROLES_LISTAR_ROLES),
            'roles'           => $roles
        );
        $this->view->listarRoles($vars);
    }

    public function crearRol()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isSecurity();
        // Vars
        $accionesModel = new AccionesModel();
        $vars = array(
            'nuevo_rol'        => $this->link(MODULE_ROLES, MODULE_ROLES_CREAR_ROL),
            'acciones_sistema' => $accionesModel->getAcciones(true),
        );
        // Crear rol
        if ($_POST)
        {
            $rol = $this->getValue('rol');
            $permitidas = array();
            $noPermitidas = array();
            if (!empty($rol['acciones']))
            {
                // Permitidas
                if (!empty($rol['acciones']['permitidas']))
                {
                    foreach($rol['acciones']['permitidas'] as $permitida)
                    {
                        if (isset($vars['acciones_sistema'][$permitida]))
                        {
                            $permitidas[]= $vars['acciones_sistema'][$permitida];
                            unset($vars['acciones_sistema'][$permitida]);
                        }
                    }
                }
                // Permitidas
                if (!empty($rol['acciones']['no_permitidas']))
                {
                    foreach($rol['acciones']['no_permitidas'] as $noPermitida)
                    {
                        if (isset($vars['acciones_sistema'][$noPermitida]))
                        {
                            $noPermitidas[]= $vars['acciones_sistema'][$noPermitida];
                            unset($vars['acciones_sistema'][$noPermitida]);
                        }
                    }
                }
            }
            $vars['acciones_rol_permitidas']    = $permitidas;
            $vars['acciones_rol_no_permitidas'] = $noPermitidas;
            // Check err
            $errs = array();
            if (empty($rol['nombre']))
            {
                $errs[]= 'El rol debe tener un nombre';
            }
            else if ($this->model->nombreExists($rol['nombre']))
            {
                $errs[]= 'El nombre del rol ya se encuentra en uso';
            }
            if (empty($rol['descripcion']))
            {
                $errs[]= 'El rol debe tener una descripci&oacute;n';
            }
            if (empty($vars['acciones_rol_permitidas']) && empty($vars['acciones_rol_no_permitidas']))
            {
                $errs[]= 'El rol debe tener al menos una accion permitida o no permitida';
            }
            if (!empty($errs))
            {
                $this->error($errs);
            }
            else
            {
                if ($this->model->guardarRol($rol, $permitidas, $noPermitidas))
                {
                    $this->notice('Rol creado con &eacute;xito.');
                    $this->redirectTo(MODULE_ROLES);
                }
                else
                {
                    $this->error('Error creando rol. Intentente nuevamente.');
                }
            }
            $vars['rol'] = $rol;
        }
        $this->view->crearRol($vars);
    }

    public function editarRol()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isSecurity();
        // Check rol id
        $idRol = $this->getValue('id');
        if ($rol = $this->model->getRol($idRol))
        {
            // Vars
            $accionesModel = new AccionesModel();
            $vars = array(
                'editar_rol'       => $this->link(MODULE_ROLES, MODULE_ROLES_EDITAR_ROL),
                'acciones_sistema' => $accionesModel->getAcciones(true),
            );
            // post?
            if ($_POST)
            {
                $postedRol = $this->getValue('rol');
                $permitidas = array();
                $noPermitidas = array();
                if (!empty($postedRol['acciones']))
                {
                    // Permitidas
                    if (!empty($postedRol['acciones']['permitidas']))
                    {
                        foreach($postedRol['acciones']['permitidas'] as $permitida)
                        {
                            if (isset($vars['acciones_sistema'][$permitida]))
                            {
                                $permitidas[]= $vars['acciones_sistema'][$permitida];
                                unset($vars['acciones_sistema'][$permitida]);
                            }
                        }
                    }
                    // Permitidas
                    if (!empty($postedRol['acciones']['no_permitidas']))
                    {
                        foreach($postedRol['acciones']['no_permitidas'] as $noPermitida)
                        {
                            if (isset($vars['acciones_sistema'][$noPermitida]))
                            {
                                $noPermitidas[]= $vars['acciones_sistema'][$noPermitida];
                                unset($vars['acciones_sistema'][$noPermitida]);
                            }
                        }
                    }
                }
                $vars['acciones_rol_permitidas']    = $permitidas;
                $vars['acciones_rol_no_permitidas'] = $noPermitidas;
                // Check err
                $errs = array();
                if (empty($postedRol['nombre_rol']))
                {
                    $errs[]= 'El rol debe tener un nombre';
                }
                else if ($this->model->nombreExists($postedRol['nombre_rol'], $idRol))
                {
                    $errs[]= 'El nombre del rol ya se encuentra en uso';
                }
                if (empty($postedRol['descripcion']))
                {
                    $errs[]= 'El rol debe tener una descripci&oacute;n';
                }
                if (empty($vars['acciones_rol_permitidas']) && empty($vars['acciones_rol_no_permitidas']))
                {
                    $errs[]= 'El rol debe tener al menos una accion permitida o no permitida';
                }
                $postedRol['idrol'] = $rol['idrol'];
                if (!empty($errs))
                {
                    $this->error($errs);
                }
                else
                {
                    if ($this->model->editarRol($idRol, $postedRol, $permitidas, $noPermitidas))
                    {
                        $this->notice('Rol editado con &eacute;xito.');
                        $this->redirectTo(MODULE_ROLES);
                    }
                    else
                    {
                        $this->error('Error editando rol. Intentente nuevamente.');
                    }
                }
                $vars['rol'] = $postedRol;
            }
            else
            {
                if (!empty($rol['acciones']['permitidas']))
                {
                    foreach ($rol['acciones']['permitidas'] as $accion)
                    {
                        unset($vars['acciones_sistema'][$accion['idaccion']]);
                    }
                }
                if (!empty($rol['acciones']['no_permitidas']))
                {
                    foreach ($rol['acciones']['no_permitidas'] as $accion)
                    {
                        unset($vars['acciones_sistema'][$accion['idaccion']]);
                    }
                }
                $vars['acciones_rol_permitidas']    = $rol['acciones']['permitidas'];
                $vars['acciones_rol_no_permitidas'] = $rol['acciones']['no_permitidas'];
                unset($rol['acciones']);
                $vars['rol'] = $rol;
            }
            $this->view->editarRol($vars);
        }
        else
        {
            $this->error('El rol seleccionado es incorrecto.');
            $this->redirectTo(MODULE_ROLES);
        }
    }

    public function rolesPorUsuario()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isSecurity();
        // Get page and list
        $pageNumber = $this->getPage();
        $usuarios = $this->model->getUsuarios($pageNumber);
        $vars = array(
            'asignar_action'              => $this->link(MODULE_ROLES, MODULE_ROLES_ASIGNAR_ROL),
            'roles'                       => $this->model->getAllRoles(),
            'pagination_link'             => $this->link(MODULE_ROLES, MODULE_ROLES_POR_USUARIO),
            'usuarios'                    => $usuarios,
            'action_acciones_por_usuario' => $this->link(MODULE_ACCIONES, MODULE_ACCIONES_POR_USUARIO),
        );
        $this->view->listarUsuarios($vars);
    }

    public function asignarRol()
    {
        // Check if user is logged in
        $this->userLoggedIn(true);
        $this->isSecurity(true);
        // Post
        $user = $this->getValue('iduser');
        $fkrol = $this->getValue('fkrol');
        $usuarios = $this->model->getAllUsuarios();
        $roles = $this->model->getAllRoles();
        if (!empty($usuarios[$user]) && !empty($roles[$fkrol]))
        {
            if ($this->model->asignarRol($user, $fkrol))
            {
                $this->jSon(array('res' => 'ok', 'rol' => $roles[$fkrol]['nombre_rol']));
            }
            else
            {
                $this->jSon(array('res' => 'err'));
            }
        }
        else
        {
            $this->jSon(array('res' => 'err'));
        }
    }

    public function borrarRol()
    {
        // Check if user is logged in
        $this->userLoggedIn(true);
        $this->isSecurity(true);
        $idRol = $this->getValue('id');
        if ($rol = $this->model->getRol($idRol))
        {
            if ($this->model->borrarRol($idRol))
            {
                $this->notice('El rol fue borrado exitosamente.');
                $this->redirectTo(MODULE_ROLES);
            }
            else
            {
                $this->error('El rol seleccionado es incorrecto.');
                $this->redirectTo(MODULE_ROLES);
            }
        }
        else
        {
            $this->error('El rol seleccionado es incorrecto.');
            $this->redirectTo(MODULE_ROLES);
        }
    }

}

?>